package com.example.dw.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.dw.entity.News;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * 新闻Mapper接口
 * @author system
 * @since 2024-01-01
 */
@Mapper
public interface NewsMapper extends BaseMapper<News> {

    /**
     * 获取最新新闻（按创建时间排序）
     */
    @Select("SELECT * FROM news ORDER BY createdAt DESC LIMIT #{limit}")
    List<News> getNewsByNew(@Param("limit") Integer limit);

    /**
     * 获取最新新闻Web版（分页）
     */
    @Select("SELECT * FROM news ORDER BY createdAt DESC LIMIT #{offset}, #{size}")
    List<News> getNewsByNewWeb(@Param("offset") Integer offset, @Param("size") Integer size);

    /**
     * 根据ID获取新闻
     */
    @Select("SELECT * FROM news WHERE newsid = #{newsid}")
    News getNewsById(@Param("newsid") Integer newsid);

    /**
     * 获取所有新闻（分页）
     */
    @Select("SELECT * FROM news ORDER BY createdAt DESC LIMIT #{offset}, #{size}")
    List<News> getAllNewsPage(@Param("offset") Integer offset, @Param("size") Integer size);

    /**
     * 搜索新闻（根据标题）
     */
    @Select("SELECT * FROM news WHERE newsName LIKE CONCAT('%', #{keyword}, '%') ORDER BY createdAt DESC LIMIT #{offset}, #{size}")
    List<News> searchNewsByKeyword(@Param("keyword") String keyword, @Param("offset") Integer offset, @Param("size") Integer size);

    /**
     * 获取新闻总数
     */
    @Select("SELECT COUNT(*) FROM news")
    Integer getNewsCount();

    /**
     * 根据关键字获取新闻总数
     */
    @Select("SELECT COUNT(*) FROM news WHERE newsName LIKE CONCAT('%', #{keyword}, '%')")
    Integer getNewsCountByKeyword(@Param("keyword") String keyword);
} 